broadway: fix texture upload
authorBenjamin Otte <otte@redhat.com>
Thu, 28 Oct 2021 12:48:20 +0000 (14:48 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 28 Oct 2021 12:48:20 +0000 (14:48 +0200)
This was carelessly broken by me in 5b473911.

While fixing it anyway, at some support for better error handling.

Fixes #4381

gdk/broadway/gdkbroadway-server.c

index 4ce17727cd09e713e826cd647c6b77fd38b47cfc..bd221f54424682dcfbc27ff410ef2155e4e728e2 100644 (file)
@@ -620,21 +620,28 @@ gdk_broadway_server_upload_texture (GdkBroadwayServer *server,
   gsize size;
   int fd;
 
-  id = server->next_texture_id++;
-
   bytes = gdk_texture_save_to_png_bytes (texture);
   fd = open_shared_memory ();
   data = g_bytes_get_data (bytes, &size);
 
-  while (size)
+  id = server->next_texture_id++;
+
+  msg.id = id;
+  msg.offset = 0;
+  msg.size = 0;
+
+  while (msg.size < size)
     {
-      gssize ret = write (fd, datasize);
+      gssize ret = write (fd, data + msg.size, size - msg.size);
 
       if (ret <= 0)
-        break;
+        {
+          if (errno == EINTR)
+            continue;
+          break;
+        }
 
-      size -= ret;
-      data += ret;
+      msg.size += ret;
     }
 
   g_bytes_unref (bytes);